package DataStructure.graph;

import DataStructure.linear.Queue;

public class Graph {
    //定点数目
    private final int V;
    //边的数目
    private int E;
    //邻接表
    private Queue<Integer>[] adj;

    public Graph(int V){
        //初始化顶点数目
        this.V=V;
        //初始化边的数目
        this.E=0;
        //初始化邻接表
        this.adj=new Queue[V];
        for (int i = 0; i < adj.length; i++) {
            adj[i]=new Queue<Integer>();
        }
    }

    //获取定点的数目
    public int V(){
        return V;
    }

    //获取边的数目
    public int E(){
        return E;
    }

    //向图中添加一条边v-w
    public void addEdge(int v,int w){
        //在无向图中，所以该边既可以说从w到v,也可以说从v到w,因此需要让w出现在v的邻接表中，还要让v出现在w邻接表中
        adj[v].enqueue(w);
        adj[w].enqueue(v);
        E++;
    }

    //获取和定点v相邻的所有顶点
    public Queue<Integer> adj(int v){
        return adj[v];
    }

}
